This invention relates to automatically determining that faults or failures exist in target software that is executing, determining action, if any, that can be taken to eliminate these faults/failures, and implementing the action, while the target software continues its operation.
There are a variety of faults that can adversely affect the anticipated execution of software. For example, there are Trojans, Viruses, Worms, buffer overflow, mal-formed interactions with degraded hardware, etc. An input utilized by the software may be unexpected, i.e. text may be entered where a numerical entry is anticipated, the value of an input may exceed an anticipated range of values, etc. This may cause the software to enter a state not anticipated by the software designer and thereby cause the operation of the software itself to function in an unanticipated (anomalous) manner. A series of inputs, even within an anticipated range, may appear in a combination or series that produces unexpected and/or unintended states of the software in space and/or time of the execution. Similarly, unexpected output values or unexpected intermediate values/states may result in unexpected software states/actions. The memory locations (address range) and/or size of memory utilized during the execution of the software may vary unexpectedly from the anticipated behavior. For example, the software may become infected with “malware” which may increase the occupied size of the memory of the software itself or may redirect the software to access a software module associated with the malware outside of the original software memory map.
There exists a need for an improved technique for determining if such software faults or failures are present and eliminating, if possible, the root cause of the faults/failures. It is preferable that the determination of software fault(s)/failure(s) and the elimination of the fault(s)/failure(s) be accomplished automatically while the execution of the subject software continues without interruption.